/**
 *  ts 最重要的就给每一个变量添加上对应的类型
 *
 *      当一个变量被确定了类型后, 就无法赋值为其他的类型
 *
 *  语法: let/const/var 变量名:数据类型 = 给变量的值
 *
 *  项目中使用 ts 会有脚手架工具帮助我们完成 ts 的编译, 运行在浏览器中的就是 编译完成后的 js
 *
 *  现在没有脚手架帮助我们编译, 所以我们需要自己手动使用 tsc 完成代码的编译转换
 *
 *  如果使用 ts-node 可以帮助我们完成自动编译
 *      安装 ts-node: npm i ts-node -g
 *  当前的这个第三方包会给我们提供一个 node 环境, 然后去运行我们的 ts 代码
 *      当前的第三方包在运行的时候, 会自动帮我们把 ts 代码做一个编译处理, 然后将编译完成的代码运行到 node 环境中
 *  注意: 当前第三方包只会帮我们解析运行 ts 代码, 并不会帮我们创建对应的 js 文件
 */

// let num = 100
// console.log(num)

let num: number = 100;
// num = 'qf001'
console.log(num);

let str: string = "qf001";
console.log(str);

let un: undefined = undefined;
console.log(un);

let nu: null = null;
console.log(nu);

let bo1: boolean = true;
let bo2: boolean = false;
console.log(bo1);
console.log(bo2);

/**
 *  出场度最高的 类型限制, 但是项目中写多了会挨骂
 *
 *      any 表示不确定当前变量具体的值是什么, 或者这个变量的值类型有可能会出现多个
 */
// let box: number = 100
// box = 'qf001'

// let box: string = 100
// box = 'qf001'

let box: any = 100;
box = "qf001";
box = true;
box = undefined;
box = null;
box = [];
box = {};
box = () => {};

/**
 *  1. 完成功能
 *      书写 js 代码, 给每一个变量添加一个类型为 any
 *  2. 优化代码
 *      优化我们的逻辑代码(数量/速度), 以及将我们的 any 更改为对应的类型
 * 
 *  如果出现一种情况, 就是一个变量的初始值是数字, 后续赋值的是字符串
 *      说明代码写的有问题, 将初始值更改为 字符串类型
*/